package yu.ac.bg.etf.kdp.klase;

import java.io.Serializable;
import java.net.*;

public class Job implements Serializable {
	
	private static int cnt = 0;
	private int id;

	public static final int JOB_READY = 0;
	public static final int JOB_SCHEDULED = 1;
	public static final int JOB_RUNNING = 2;
	public static final int JOB_DONE = 3;
	public static final int JOB_FAILED = 4;
	public static final int JOB_ABORTED = 5;
	
	private String command;
	private String results;
	
	private int status;
	private Node mainWorkstation;
	private NodeList involvedWorkstations;
	
	public Job (String command, String results, int status) {
		mainWorkstation = null;
		involvedWorkstations = null;
		id = cnt++;
		this.command = command;
		this.results = results;
		this.status = status;
		if (command == null || results == null) {
			System.out.println("Null job parametars..");
			System.exit(1);
		}
		if (!validate(command)) {
			System.out.println("Bad job parametars..");
			System.exit(1);
		}
	}
	
	private boolean validate (String command) {
		if (command.equals("solve") || command.equals("calculate")
			|| command.equals("getLUDecomposition")
			|| command.equals("getEigenvalueDecomposition")
			|| command.equals("getInverseMatrix")
			|| command.equals("getMatrixDeterminant")) {
			return true;
		} else return false;
	} 
	
	public String getCommand() {
		return command;
	}

	public void setCommand(String command) {
		this.command = command;
	}

	public String getResults() {
		return results;
	}

	public void setResults(String results) {
		this.results = results;
	}
	
	public int getStatus() {
		return status;
	}

	public void setStatus(int status) {
		this.status = status;
	}

	public int getId() {
		return id;
	}

	public Node getMainWorkstation() {
		return mainWorkstation;
	}

	public NodeList getInvolvedWorkstations() {
		return involvedWorkstations;
	}

	public void setMainWorkstation(Node mainWorkstation) {
		this.mainWorkstation = mainWorkstation;
	}

	public void setInvolvedWorkstations(NodeList involvedWorkstations) {
		this.involvedWorkstations = involvedWorkstations;
	}

	public void setId
	
	public static String statusToString(int status2) {
		// TODO Auto-generated method stub
		String str = "";
		switch (status2) {
		case JOB_ABORTED:	str = "JOB ABORTED";break;
		case JOB_FAILED:	str = "JOB FAILED";break;
		case JOB_DONE:	str = "JOB DONE";break;
		case JOB_RUNNING:	str = "JOB RUNNING";break;
		case JOB_READY:	str = "JOB READY";break;
		case JOB_SCHEDULED:	str = "JOB SCHEDULED";break;
		default:	break;
		}
		return str;
	}
		
}
